// cManagerTelex

// private var m_vListaTelex:Array;										->		todas las tarjetas telex
// private var m_myJuego:cJuego											->		referencia al juego		

// public function cManagerTelex(_j:cJuego) 							->		constructor
// private function Init():void											->		inicializacion de variables miembro
// public function Load(_fileXML:String):void							->		carga las tarjetas telex por xml
// public function LoadComplete(_myXML:XML, _isLast:Boolean):void		->		fin de la carga del xml
// public function GeneraTelex(_myXML:XML):Boolean						->		almacena en memoria las tarjetas telex
// public function MezclaTarjetas():void								->		cambia el orden como barajandolas
// public function LeerTarjeta():cTelex									->		lectura de tarjeta de la descripcion	

package game.telex 
{
	import game.juego.cJuego;
	import game.IXMLLoadable;
	import game.Main;
	import utils.cUtils;
	import utils.LoadFiles;
	/**
	 * ...
	 * @author miquel
	 */
	public class cManagerTelex implements IXMLLoadable
	{
		private var m_vListaTelex:Array;
		private var m_myJuego:cJuego		= null;
		
		public function cManagerTelex(_j:cJuego) 
		{
			m_myJuego = _j;
			Init();
		}

		private function Init():void
		{
			m_vListaTelex = new Array();
		}
		
		/**
		 * Load: Ordena obtener los datos del xml del tablero 
		 * @param	_fileXML
		 */
		public function Load(_fileXML:String):void
		{
			if(Main.DEBUG_LOAD_FILES) trace("Load.xml " + _fileXML + " this " + this);
			LoadFiles.CargaArchivoXML(_fileXML, this);
		}
		
		
		/**
		 * LoadComplete: recibe este mensaje cuando se ha cargado el xml y lo utiliza para crear el array de tablero
		 * @param	_myXML
		 */
		public function LoadComplete(_myXML:XML, _isLast:Boolean):void
		{
			if(Main.DEBUG_LOAD_FILES) trace("cManagerTelex.as::LoadComplete::" + _myXML);
			
			GeneraTelex(_myXML);

			//si todo es correcto mezcla las tarjetas inicialmente, tambien lo hace en la preparacion del juego
			//MezclaTarjetas();
			
			if (_isLast)
			{
				trace("cManagerTelex.as::LoadComplete:YA PODEMOS JUGAR!:");
				m_myJuego.PreparacionJuego();
			}
		}
		
		public function GeneraTelex(_myXML:XML):Boolean
		{
			if (_myXML != null)
			{
				//composicion de tarjetas telex
				for each(var l_telex:XML in _myXML.children())
				{
					//trace("cManagerTelex.as::GeneraTelex::" + l_telex.@accion + ":" + l_telex.@id + ":" + l_telex.@contenido);
					
					var l_pTelex:cTelex = new cTelex();
					
					if (l_pTelex != null)
					{
						l_pTelex.m_uiNumTarjetaTelex = l_telex.@id;
						l_pTelex.m_sMensaje = l_telex.@contenido;
						l_pTelex.m_pAccion = l_telex.@accion;
						l_pTelex.m_pTercero = l_telex.@accionsobre

						if (m_vListaTelex != null)
						{
							var l_iLenghtVector:uint = m_vListaTelex.push(l_pTelex);
							trace("cManagerTelex.as::GeneraTelex:Añadido:" + l_pTelex.m_uiNumTarjetaTelex + " en el vector de casillas del manager de telex. Total=" + l_iLenghtVector);
						}
						else
						{
							trace("cManagerTelex.as::GeneraTelex:Problema añadiendo Telex:" );
							return false;
						}
					}
					else
					{
						trace("cManagerTelex.as::GeneraTelex:Error! No se ha podido crear el telex:" );
						return false;
					}
				}

				return true;
			}
			else
			{
				return false;
			}
		}
	
		public function MezclaTarjetas():void
		{
			m_vListaTelex = cUtils.Shuffle(m_vListaTelex);	
			for (var i:uint = 0; i < m_vListaTelex.length; i++)
			{
				trace("*>*>*>*>*cManagerTelex.as::MezclaTarjetas:MEZCLADA:" + m_vListaTelex[i].print());
			}
		}
		
		public function LeerTarjeta():cTelex
		{
			//se coge la primera y se pone al final, y se da para leer
			var _t:cTelex = m_vListaTelex.shift();
			m_vListaTelex.push(_t);
			return _t;
		}
	}

}